﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using Entidades.Sistema.Base;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;

namespace Entidades.Sistema.Venta
{
    public class Cliente
    {
        private int _idCliente;
        private String _nombre;
        private TipoCliente _tipoCliente;
        private CondicionIva _condicionIva;
        private String _cuit;
        private String _email;
        private String _telefono;
        private String _fax;
        private Barrio _barrio;
        private String _calle;
        private int _nroCalle;
        private int _piso;
        private String _departamento;
        private List<Contacto> _contactos;

        public Cliente()
        {
            TipoCliente = new TipoCliente();
            CondicionIva = new CondicionIva();
            Barrio = new Barrio();
        }

        public int IdCliente
        {
            get { return _idCliente; }
            set { _idCliente = value; }

        }

        public String Nombre
        {
            get { return _nombre; }
            set { _nombre = value; }
        }

        public IList<Contacto> Contactos
        {
            get { return _contactos; }
        }

        public void AgregarContacto(Contacto contacto)
        {
            _contactos.Add(contacto);
        }

        public void EliminarContacto(Contacto contacto)
        {
            _contactos.RemoveAll(x => x.IdContacto == contacto.IdContacto);
        }

        [Required(ErrorMessage = "Tipo Cliente Es Requerido")]
        public TipoCliente TipoCliente
        {
            get { return _tipoCliente; }
            set { _tipoCliente = value; }

        }
        [Required(ErrorMessage = "Condicion de Iva Es Requerido")]
        public CondicionIva CondicionIva
        {
            get { return _condicionIva; }
            set { _condicionIva = value; }

        }
        public String Cuit
        {
            get { return _cuit; }
            set { _cuit = value; }
        }

        [Required(ErrorMessage = "Email es requerido")]
        [RegularExpression("\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*", ErrorMessage = "Email es invalido")]
        public String Email
        {
            get { return _email; }
            set { _email = value; }
        }
        public String Telefono
        {
            get { return _telefono; }
            set { _telefono = value; }
        }
        public String Fax
        {
            get { return _fax; }
            set { _fax = value; }
        }
        [Required(ErrorMessage = "Barrio Es Requerido")]
        public Barrio Barrio
        {
            get { return _barrio; }
            set { _barrio = value; }
        }
        public String Calle
        {
            get { return _calle; }
            set { _calle = value; }
        }
        public int NroCalle
        {
            get { return _nroCalle; }
            set { _nroCalle = value; }
        }
        public int Piso
        {
            get { return _piso; }
            set { _piso = value; }
        }
        public String Departamento
        {
            get { return _departamento; }
            set { _departamento = value; }
        }
        public String Direccion
        {
            get { return String.Format("{0} - {1}", this.Calle, this.NroCalle.ToString()); }
        }

        public int IdProvincia { get { return this.Barrio.Localidad.Provincia.IdProvincia; } set { ;} }
        public int IdLocalidad { get { return this.Barrio.Localidad.IdLocalidad; } set { ;} }


    }
}
